package org.tang.springcloudvv.util;

import java.math.BigDecimal;

public class BigDecimalUtil {

	/*
	 * 加法
	 */
	public static Double add(Double source,Double toSub)
	{
		BigDecimal bSource = new BigDecimal(""+source);
		BigDecimal result = bSource.add(new BigDecimal(""+toSub)).setScale(2, BigDecimal.ROUND_HALF_UP);
		return result.doubleValue();
	}
	//不要四舍五入。保留设置数字，后面所有直接去除: BigDecimal.ROUND_DOWN
	public static BigDecimal add2(Double source,Double toSub,int ROUND_)
	{
		BigDecimal bSource = new BigDecimal(""+source);
		BigDecimal result = bSource.add(new BigDecimal(""+toSub)).setScale(2, ROUND_);
		return result;
	}
	/*
	 * 减法
	 */
	public static Double sub(Double source,Double toSub)
	{
		BigDecimal bSource = new BigDecimal(""+source);
		BigDecimal result = bSource.subtract(new BigDecimal(""+toSub)).setScale(2, BigDecimal.ROUND_HALF_UP);
		return result.doubleValue();
	}

	/*
	 * 乘法
	 * 默认的：保留2位小数，且四舍五入
	 */
	public static Double mul(Double source,Double toMul)
	{
		BigDecimal bSource = new BigDecimal(""+source);
		BigDecimal result = bSource.multiply(new BigDecimal(""+toMul)).setScale(2, BigDecimal.ROUND_HALF_UP);
		return result.doubleValue();
	}

	/*
	 * 乘法
	 * 保留2位小数
	 * BigDecimal.ROUND_DOWN 保留设置数字，后面所有直接去除
	 * BigDecimal.ROUND_UP   不管保留数字后面是大是小(0除外)都会进1
	 * ROUND_HALF_UP：根据保留数字后一位>=5进行四舍五入
	 * ROUND_HALF_DOWN：根据保留数字后一位>5进行四舍五入
	 */
	public static Double mul2(Double source,Double toMul,int ROUND_)
	{
		BigDecimal bSource = new BigDecimal(""+source);
		BigDecimal result = bSource.multiply(new BigDecimal(""+toMul)).setScale(2, ROUND_);
		return result.doubleValue();
	}
	public static BigDecimal mul3(Double source,Double toMul,int ROUND_)
	{
		BigDecimal bSource = new BigDecimal(""+source);
		BigDecimal result = bSource.multiply(new BigDecimal(""+toMul)).setScale(2, ROUND_);
		return result;
	}
	public static long mul4(BigDecimal source,Double toMul)
	{
		BigDecimal result = source.multiply(new BigDecimal(""+toMul));
		return result.longValue();
	}
	public static long mul5(BigDecimal source,int toMul)
	{
		BigDecimal result = source.multiply(new BigDecimal(""+toMul));
		return result.longValue();
	}


	
	/**
	 * 四舍五入小数
	 */
	public static Double doubleNumHalfUp(Double num) {
	    if (num == null) {
	        return 0d;
	    }
	    return BigDecimal.valueOf(num).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
	}
	
	
	/**
     * 转成四舍五入，带两位小数的数字
     */
    public static BigDecimal div(Double num1, Double num2, Integer scale) {
        try {
            if (num1 == null || num2 == null) {
                return BigDecimal.ZERO;
            }
            if (num2 == 0) {
                return BigDecimal.ZERO;
            }
            Double number = num1 * 1.0d / num2;
            /*DecimalFormat format = new DecimalFormat("0.00");//格式化设置
            format.setRoundingMode(RoundingMode.HALF_UP);*/
            return new BigDecimal(number.toString()).setScale(scale, BigDecimal.ROUND_HALF_UP);
        } catch (Exception e) {
            return null;
        }

    }
	
	
}
